package GUI
{
	import DAL.*;
	
	import MUNDO.*;
	
	import flash.display.TriangleCulling;
	import flash.events.*;
	import flash.text.TextField;
	import flash.text.TextFieldType;
	import flash.text.TextFormat;
	import flash.utils.Timer;
	
	import sample.ui.components.Component;
	public class Registro
	{
		//Atributos
		private var _triviador:Triviador = null;							//Instancia de la clase triviador
		private var _nombreR:TextField = new TextField();					//Nombre de Usuario
		private var _contraseniaR:TextField = new TextField();				//Contraseña
		private var _contraseniaRrepetir:TextField = new TextField();		//Repetir Contraseña
		private var _registroButton:RegistrarseB = new RegistrarseB();		//Botón de Registro
		private var _asterisco1:TextField = new TextField();				//Asterisco de validación de Nombre de Usuario
		private var _asterisco2:TextField = new TextField();				//Asterisco de validación de Contraseña
		private var _asterisco3:TextField = new TextField();				//Asterisco de validación de Contraseña 2
		private var _mensajeError:TextField = new TextField();				//Mensaje de error de validación
		private var _timer3Seg:Timer = null;								//temporizador para el registro
		
		/**
		 * Constructor de la clase Registro
		 * @param triviador 
		 */
		public function Registro(triviador:Triviador)
		{
			_triviador = triviador;
			_timer3Seg = new Timer(1000,3);
		}
		
		//Métodos
		/**
		 * Función que muestra la escena donde se encuentra el registro del nuevo usuario.
		 * Además hace un llamado a la función ubicarElementosGaficos, la cual configura elementos visuales.
		 **/
		public function mostrarRegistro():void
		{
			_triviador.gotoAndStop(1,"Escena 15");
			ubicarElementosGaficos();
			_triviador.addChild(_nombreR);
			_triviador.addChild(_contraseniaR);
			_triviador.addChild(_contraseniaRrepetir);
			_triviador.addChild(_registroButton);
			_registroButton.addEventListener(MouseEvent.CLICK, onClick);
		}
		/**
		 * Función que configura las propiedades de los elementos gráficos a mostrar en el registro del nuevo usuario.
		 **/
		public function ubicarElementosGaficos():void
		{
			//Construccion del campo para ingresar el nombre
			_nombreR.type = TextFieldType.INPUT;
			_nombreR.height = 32,20;
			_nombreR.width = 213;
			_nombreR.x = 280;
			_nombreR.y = 114;
			_nombreR.defaultTextFormat = Utils.formatearTitulos();
			_nombreR.textColor = 0x040E1D;
			//Construccion del campo para ingresar la contraseña
			_contraseniaR.type = TextFieldType.INPUT;
			_contraseniaR.displayAsPassword = true;
			_contraseniaR.height = 32,20;
			_contraseniaR.width = 213;
			_contraseniaR.x = 281;
			_contraseniaR.y = 183;
			_contraseniaR.defaultTextFormat = Utils.formatearTitulos();
			_contraseniaR.textColor = 0x040E1D;
			//Construccion del campo para ingresar repetir la contraseña
			_contraseniaRrepetir.type = TextFieldType.INPUT;
			_contraseniaRrepetir.displayAsPassword = true;
			_contraseniaRrepetir.height = 32,20;
			_contraseniaRrepetir.width = 213;
			_contraseniaRrepetir.x = 281;
			_contraseniaRrepetir.y = 244;
			_contraseniaRrepetir.defaultTextFormat = Utils.formatearTitulos();
			_contraseniaRrepetir.textColor = 0x040E1D;
			//Construccion del boton de iniciar registro
			_registroButton.x = 320;
			_registroButton.y = 290;
		}
		/**
		 * Esta funcion se ejecuta al oprimir el boton registrarse. Se comprueba que se ha
		 * escrito un nombre de usuario, la contraseña y se repita la contraseña. Además
		 * se verifica que no exista un usuario con ese nombre de registro
		 * @param mouseEvent El evento que ha generado el usuario al dar click al boton Registrar.
		 */
		public function onClick( mouseEvent:MouseEvent)
		{ 
			
			var falta:Boolean = false;
			_asterisco1.text = "";
			_asterisco2.text = "";
			_asterisco3.text = "";
			_mensajeError.text = "";
			_mensajeError.width = 200;
			_mensajeError.height = 30;
			_triviador.addChild(_asterisco1);
			_triviador.addChild(_asterisco2);
			_triviador.addChild(_asterisco3);
			_triviador.addChild(_mensajeError);
			
			if (_nombreR.text.length == 0){
				_asterisco1.x = 280;
				_asterisco1.y = 85;
				_asterisco1.width = 10;
				_asterisco1.text = "*";
				_asterisco1.setTextFormat(Utils.formatearErrores());
				_triviador.addChild(_asterisco1);
				falta = true;
			}
			if (_contraseniaR.text.length == 0){
				_asterisco2.x = 280;
				_asterisco2.y = 150;
				_asterisco2.width = 10;
				_asterisco2.text = "*";
				_asterisco2.setTextFormat(Utils.formatearErrores());
				_triviador.addChild(_asterisco2);
				falta = true;
			}
			if (_contraseniaRrepetir.text.length == 0) {
				_asterisco3.x = 280;
				_asterisco3.y = 215;
				_asterisco3.width = 10;
				_asterisco3.text = "*";
				_asterisco3.setTextFormat(Utils.formatearErrores());
				_triviador.addChild(_asterisco3);
				falta = true;
			}
			if (falta) {
				_mensajeError.x = 328;
				_mensajeError.y = 70;
				_mensajeError.height = 20;
				_mensajeError.text = "* Campo Obligatorio.";
				_mensajeError.setTextFormat(Utils.formatearErrores());
				_triviador.addChild(_mensajeError);
			} else if (_contraseniaR.text != _contraseniaRrepetir.text)
			{
				_mensajeError.x = 295;
				_mensajeError.y = 70;
				_mensajeError.height = 20;
				_mensajeError.text = "LAS CONTRASEÑAS NO COINCIDEN";
				_mensajeError.setTextFormat(Utils.formatearErrores());
				_triviador.addChild(_mensajeError);
			}
			else {
				RegistroDAO._triviador=_triviador;
				RegistroDAO.crearUsuario(_nombreR.text,_contraseniaR.text);
			}
			if (RegistroDAO.existe == 1)
			{
				_mensajeError.x = 330;
				_mensajeError.y = 70;
				_mensajeError.height = 20;
				_mensajeError.text = "¡¡EL USUARIO YA EXISTE!!";
				_mensajeError.setTextFormat(Utils.formatearErrores());
				_triviador.addChild(_mensajeError);
				RegistroDAO.existe = 0;
				
			}
			else if (RegistroDAO.existe == 2)
			{
				_triviador.removeChild(_nombreR);
				_triviador.removeChild(_contraseniaR);
				_triviador.removeChild(_contraseniaRrepetir);
				_triviador.removeChild(_registroButton);
				_triviador.gotoAndStop(2,"Escena 15");
				_timer3Seg.addEventListener(TimerEvent.TIMER_COMPLETE,onTimerComplete);
				_timer3Seg.start();
				_triviador.removeChild(_asterisco1);
				_triviador.removeChild(_asterisco2);
				_triviador.removeChild(_asterisco3);
				_triviador.removeChild(_mensajeError);
				RegistroDAO.existe = 0;
			}
		}
		
		/**
		 * Función que permite detener y resetear el temporizador y devolverse al login
		 * @param event Evento que temporiza el tiempo definido.
		 */
		public function onTimerComplete(event:TimerEvent):void 
		{
			_timer3Seg.stop();
			_timer3Seg.reset();
			var login:Login = new Login(_triviador);
			login.mostrarLogin();
		}
	}
}